using System;
using Sinacor.Infra.UI.Common;
using Sinacor.Infra.UI.Security.Services;
using System.Collections.Generic;
using Sinacor.Infra.Common;
using Sinacor.UI.Bovespa.ManutencaoOrdens.Communication.Bovespa.ManutencaoOrdens.Parametro;
using Sinacor.UI.Bovespa.ManutencaoOrdens.Communication.Bovespa.ManutencaoOrdens.Titulo;

namespace Sinacor.UI.Bovespa.ManutencaoOrdens.Communication.Translator.DataContractToModel
{
    /// <summary>
    /// Traduz um contrato de dados em um modelo
    /// </summary>
    public class Titulo
    {
        public Titulo() { }

		/// <summary>
        /// ToTitulo
		/// </summary>
		/// <param name="from"></param>
		/// <returns></returns>
		public Model.Titulo ToTitulo(TituloResponse from)
        {
            Model.Titulo retorno = new Sinacor.UI.Bovespa.ManutencaoOrdens.Model.Titulo();

            if (from.Codigo == null)
                return null;

            retorno.Codigo = from.Codigo;
            retorno.CotacaoMediaTitulo = from.CotacaoMediaTitulo;
            retorno.CotacaoTitulo = from.CotacaoTitulo;
            retorno.DataInicioNegociacao = from.DataInicioNegociacao;
            retorno.DataPregao = from.DataPregao;
            retorno.DataVencimentoTermo = from.DataVencimentoTermo;
            retorno.Descricao = from.Descricao;
            retorno.Distribuicao = from.Distribuicao;
            retorno.Empresa = from.Empresa;
            retorno.Especificacao = from.Especificacao;
            retorno.FatorCotacao = from.FatorCotacao;
            retorno.Isin = from.Isin;

            switch (from.Mercado.Value)
            {
                case TipoMercado1.Vista:
                    retorno.Mercado = Sinacor.UI.Bovespa.ManutencaoOrdens.Model.Enum.TipoMercado.Vista;
                    break;
                case TipoMercado1.OpcaoCompra:
                    retorno.Mercado = Sinacor.UI.Bovespa.ManutencaoOrdens.Model.Enum.TipoMercado.OpcaoCompra;
                    break;
                case TipoMercado1.OpcaoVenda:
                    retorno.Mercado = Sinacor.UI.Bovespa.ManutencaoOrdens.Model.Enum.TipoMercado.OpcaoVenda;
                    break;
                case TipoMercado1.ExercicioOpcaoCompra:
                    retorno.Mercado = Sinacor.UI.Bovespa.ManutencaoOrdens.Model.Enum.TipoMercado.ExercicioOpcaoCompra;
                    break;
                case TipoMercado1.ExercicioOpcaoVenda:
                    retorno.Mercado = Sinacor.UI.Bovespa.ManutencaoOrdens.Model.Enum.TipoMercado.ExercicioOpcaoVenda;
                    break;
                case TipoMercado1.Fracionario:
                    retorno.Mercado = Sinacor.UI.Bovespa.ManutencaoOrdens.Model.Enum.TipoMercado.Fracionario;
                    break;
                case TipoMercado1.Estruturado:
                    retorno.Mercado = Sinacor.UI.Bovespa.ManutencaoOrdens.Model.Enum.TipoMercado.Estruturado;
                    break;
                case TipoMercado1.Leilao:
                    retorno.Mercado = Sinacor.UI.Bovespa.ManutencaoOrdens.Model.Enum.TipoMercado.Leilao;
                    break;
                case TipoMercado1.Termo:
                    retorno.Mercado = Sinacor.UI.Bovespa.ManutencaoOrdens.Model.Enum.TipoMercado.Termo;
                    break;
                case TipoMercado1.LeilaoNaoCotados:
                    retorno.Mercado = Sinacor.UI.Bovespa.ManutencaoOrdens.Model.Enum.TipoMercado.LeilaoNaoCotados;
                    break;
                case TipoMercado1.Futuro:
                    retorno.Mercado = Sinacor.UI.Bovespa.ManutencaoOrdens.Model.Enum.TipoMercado.Futuro;
                    break;
                case TipoMercado1.VencimentoFuturo:
                    retorno.Mercado = Sinacor.UI.Bovespa.ManutencaoOrdens.Model.Enum.TipoMercado.VencimentoFuturo;
                    break;
                case TipoMercado1.BOX:
                    retorno.Mercado = Sinacor.UI.Bovespa.ManutencaoOrdens.Model.Enum.TipoMercado.BOX;
                    break;
                case TipoMercado1.IntegralizacaoResgateCotas:
                    retorno.Mercado = Sinacor.UI.Bovespa.ManutencaoOrdens.Model.Enum.TipoMercado.IntegralizacaoResgateCotas;
                    break;
                case TipoMercado1.CotasETF:
                    retorno.Mercado = Sinacor.UI.Bovespa.ManutencaoOrdens.Model.Enum.TipoMercado.CotasETF;
                    break;
                case TipoMercado1.OpcaoVendaCompra:
                    retorno.Mercado = Sinacor.UI.Bovespa.ManutencaoOrdens.Model.Enum.TipoMercado.OpcaoVendaCompra;
                    break;                
            }

            retorno.NumeroDiasLiquidacao = from.NumeroDiasLiquidacao;
            retorno.PrecoExercido = from.PrecoExercido;
            retorno.TituloObjetoOpcoes = from.TituloObjetoOpcoes;
            
            return retorno;
		}

		/// <summary>
        /// ToTitulo - LIST
		/// </summary>
		/// <param name="from"></param>
		/// <returns></returns>
		public ModelCollection<Model.Titulo> ToTitulo(List<TituloResponse> from)
        {
            ModelCollection<Model.Titulo> lista = new ModelCollection<Sinacor.UI.Bovespa.ManutencaoOrdens.Model.Titulo>();
            Model.Titulo item = null;

            if (from == null)
                return null;

            foreach (TituloResponse inLista in from)
            {
                item = this.ToTitulo(inLista);
                lista.Add(item);
            }

            return lista;
		}
	}
}